#include <../lib/igloo/igloo.h>
using namespace igloo;

#include <stdio.h>
#include <string>
using namespace std;

#include "../../Archivos/ArchivoDeEstructurasVariables.h"
#include "../../Entidades/Cargo.h"
using namespace Archivos;
using namespace Entidades;
Context(TestCargo)
{

	ArchivoDeEstructurasVariables* archivo;
	string path;

	void SetUp() {

		path = "TestCargo.bin";
		archivo = new ArchivoDeEstructurasVariables(path);

		Cargo* entidadInsertada = new Cargo();
		entidadInsertada->setNombre("Presidente");
		Cargo* cargoAsociado1 = new Cargo();
		cargoAsociado1->setNombre("Vicepresidente");
		entidadInsertada->agregarCargoAsociado("cargoAsociado1");
		Cargo* cargoAsociado2 = new Cargo();
		cargoAsociado2->setNombre("Jefe de Gabinete");
		entidadInsertada->agregarCargoAsociado("cargoAsociado2");
		archivo->insertar(entidadInsertada);
		delete entidadInsertada;
	}

	void TearDown() {

		remove(path.c_str());
		delete archivo;
	}

	Spec(TestLeer) {

		Cargo* entidadLeida = new Cargo();
		archivo->leer(entidadLeida, 0);

		Assert::That(entidadLeida->getNombre(), Is().EqualTo("Presidente"));
		Assert::That(entidadLeida->getCargosAsociados()->size(), Is().EqualTo(2));

		if (entidadLeida->getCargosAsociados()->size() == 2) {
			Assert::That(entidadLeida->getCargosAsociados()->at(0)->getNombre(), Is().EqualTo("Vicepresidente"));
			Assert::That(entidadLeida->getCargosAsociados()->at(1)->getNombre(), Is().EqualTo("Jefe de Gabinete"));
		}

		delete entidadLeida;
	}

	Spec(TestBorrar) {

		Cargo* entidadBorrada = new Cargo();
		bool borradoExitoso = archivo->borrar(entidadBorrada, 0);
		delete entidadBorrada;

		Assert::That(borradoExitoso, Is().EqualTo(true));
	}

};

